\section{Structures de données utilisées}
Pour construire notre bibliothèque, nous avons utilisé comme structure de stockage des threads une \texttt{File} implémentée par une liste doublement chaînée\footnote{Pour plus d'informations, la structure est définie dans le fichier \texttt{fifoThread.h}}. Un thread est représenté par une structure contenant toutes les informations qui lui sont associées\footnote{la structure est définie dans le fichier \texttt{threadStructure.h}}comme suit:
\begin{lstlisting}
 Structure thread
|  int tid;                       | l'identifiant du thread
|  priorite priority;             | la priorite du thread
|  boolean is_father;             | Vrai si le thread a pere 
|  struct thread *father;         | Le thread pere
|  boolean est_attendu;           | vrai si le thread est attendu
|  struct thread *thAttendant; | L'eventuel thread qui attend le thread
|  boolean a_le_verou;            | vrai si le thread a pause un verrou  
|  int verou_id;                  | l'identite du verou eventuellement pause
|  ucontext_t *context;           | Le contexte du thread
|  status state;                  | Le statut (FINISH, STOP, READY)
|  void * valRetour;              | La valeur de retour du thread
|  void ** adresseValRetour;      | Ou stocker la valeur de retour
\end{lstlisting}
Pour stocker les threads nous utilisons trois \texttt{Files}, une pour les threads qui n'ont pas encore terminé leurs exécutions et qui qui attendent d'avoir la main, une autre pour les threads qui ont terminé et une dernière pour les threads qui attendent les ressources d'un autre thread. 
